<?php
/**
 *  User：LRZ
 *  Date：2020/1/31
 *  Time：16:44
 */

/**
 *  1217.玩筹码
 *
 *  标签：贪心算法，数组，数学
 *
 *  数轴上放置了一些筹码，每个筹码的位置存在数组 chips 当中。
 *  你可以对 任何筹码 执行下面两种操作之一（不限操作次数，0 次也可以）：
 *      将第 i 个筹码向左或者右移动 2 个单位，代价为 0。
 *      将第 i 个筹码向左或者右移动 1 个单位，代价为 1。
 *  最开始的时候，同一位置上也可能放着两个或者更多的筹码。
 *  返回将所有筹码移动到同一位置（任意位置）上所需要的最小代价。
 *
 *  示例 1：
 *      输入：chips = [1,2,3]
 *      输出：1
 *      解释：第二个筹码移动到位置三的代价是 1，第一个筹码移动到位置三的代价是 0，总代价为 1。
 *
 *  示例 2：
 *      输入：chips = [2,2,2,3,3]
 *      输出：2
 *      解释：第四和第五个筹码移动到位置二的代价都是 1，所以最小总代价为 2。
 *   
 *  提示：
 *      1 <= chips.length <= 100
 *      1 <= chips[i] <= 10^9
 *
 *  来源：力扣（LeetCode）
 *  链接：https://leetcode-cn.com/problems/play-with-chips
 *  著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */

$start = microtime(true);

$chips = [1, 2, 3, 4, 5, 6];
$res   = minCostToMoveChips($chips);

$end = microtime(true);
print_r($res);
printf(' total run: %.2f s<br>' . 'memory usage: %.2f M<br> ', $end - $start, memory_get_usage() / 1024 / 1024);

function minCostToMoveChips($chips)
{
    $odd  = 0;
    $even = 0;
    foreach ($chips as $v) {
        if ($v % 2 === 0) {
            $even++;
        } else {
            $odd++;
        }
    }
    return min($odd, $even);
}